﻿<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MaintenanceTools.aspx.cs"
 Inherits="Medianamik.UI.ConfigManagement.MaintenanceTools"
 MasterPageFile="../MasterPages/MedianamikModule.Master" Async="true" %>
<%@ Import Namespace="Medianamik.Core"%>
<%@ Import Namespace="System.Linq" %>

<asp:Content ID="CenterContent" ContentPlaceHolderID="CenterContent" runat="server">
    <asp:ScriptManagerProxy ID="ScriptManagerProxy" runat="server">
        <Services>
            <asp:ServiceReference Path="/Medianamik/Services/MaintenanceService.asmx" />
        </Services>
    </asp:ScriptManagerProxy>
    <fieldset>
       <h2>Base de données</h2>
        <h3>Scripts Magiques</h3>
           
            <ul>
                <li>Supprimer les tables et les vues générées</li>
                <li>Recréer les tables et les vues générées</li>
                <li>Remplir les tables générées</li>
            </ul>
            <p>
                <span style="background-color:Red;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                <%--<asp:Button ID="MagicScriptsButton"  runat="server" Text="Go" OnClick="MagicScriptsButton_Click"
                OnClientClick="return confirm('Rouler les scripts magiques ?');" />--%>
                <input type="button" onclick="cancelled=false;i=0;$('#cancelBtn').removeAttr('disabled');runMagicScripts();" title="Go" value="Go" />
                <input type="button" id="cancelBtn" disabled="disabled" onclick="cancelled=true;$('#cancelBtn').attr('disabled', 'disabled');setMagicScriptMessage('Régénération des tables annulée.');" title="Annuler" value="Annuler" />
                <div id="MagicScriptMessage"></div>
            </p>
         <h3>Regénérer les vues</h3>
            
            <ul>
                <li>Supprimer les vues générées</li>
                <li>Recréer les vues générées</li>
            </ul>
            <p>
                <span style="background-color:Green;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                <asp:Button ID="RegenViewsButton" runat="server" Text="Go" OnClick="RegenViewsButton_Click"
                OnClientClick="return confirm('Régénérer les vues ?');" />
            </p>
         <h3>Nettoyage des instances des noeuds</h3>
            
            <ul>
                <li>Supprimer instances neutres à la langue des noeuds non neutres à la langue</li>
                <li>Supprimer instances non neutres à la langue des noeuds neutres à la langue</li>
            </ul>
            <p>
                <span style="background-color:Green;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                <asp:Button ID="CleanNodeInstancesButton" runat="server" Text="Go" OnClick="CleanNodeInstancesButton_Click"
                OnClientClick="return confirm('Nettoyer les instances neutres à la langue ?');" />
            </p>    
         <h3>Nettoyage de BD</h3>
            <ul>
                <li>Supprimer les Noeuds avec le Flag "IsDeleted"</li>
                <li>Conserver N révisions maximum par propriété dans medianamik_NodePropertyValue</li>
                <li>Supprimer tous les enregistrements des tables générées avec Generation > 0</li>
            </ul>
            <p>
                <span style="background-color:DarkOrange;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                <asp:Button ID="CleanDatabaseButton" runat="server" Text="Go" OnClick = "CleanDatabaseButton_Click"
                OnClientClick="return confirm('Nettoyer la base de données ?');" />
             </p>
         <h2>Indexation</h2>
            <p>
                <%=string.Format(Resources("Medianamik_ConfigurationManagement", "DocumentsInIndex"), GetLuceneDocumentCount())%>
            </p>
            <h3>Recréer l'index Lucene</h3>
           
            <ul>
                <li>Remplacer les Documents de l'index Lucene pour chaque Instance de chaque Noeud</li>
            </ul>
            <p>
                <span style="background-color:Red;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                <asp:Button ID="ReindexAllButton" runat="server" Text="Go" OnClick="ReindexAllButton_Click"
                OnClientClick="return confirm('Recréer l\'index Lucene ?');"  />
            </p>
            
        
        <h2>Urls</h2>
            <h3>Nettoyage des Urls invalides</h3>
            <ul>
                <li>Retirer les Urls qui contiennent des caractères illégaux</li>
                <li>Les déplacer dans le module de redirection avec un Code 301</li>
                <li>Ré-insérer l'Url excluant les caractères illégaux</li>
            </ul>            
            <asp:CheckBox ID="PublisheNodeOnCleanedUrl" runat="server" Text="Publier les noeuds une fois l'url corrigé" Checked="true" />
            <p>
                <span style="background-color:Green;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                <asp:Button runat="server" Text="Go" OnClick="CleanUpInvalidUrls_Click"
                OnClientClick="return confirm('Nettoyer les Urls invalides ?');"  />
            </p>
            <asp:PlaceHolder ID="CleanUpUrlReport" runat="server" Visible="false">
                Nombre d'url invalide : <asp:Literal ID="InvalidUrls" runat="server" /><br />
                Nombre d'url traité avec succès : <asp:Literal ID="CleanedUrl" runat="server" /><br />
                <asp:Repeater ID="CleanUpErrors" runat="server">
                    <HeaderTemplate>
                        <b>Urls non traités</b><br />
                    </HeaderTemplate>
                    <ItemTemplate>
                        NodeId : <%# Eval("NodeId") %> => <%# Eval("ErrorMessage")%>                        
                    </ItemTemplate>
                    <SeparatorTemplate><br /></SeparatorTemplate>
                </asp:Repeater>
            </asp:PlaceHolder>
        <h2>Autre</h2>
            <h3>Plan du site</h3>
            <ul>
                <li>Régénérer le plan du site</li>
            </ul>
            <p>
                <span style="background-color:Green;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                <asp:Button ID="RebuildSiteMap" runat="server" Text="Go" OnClick="RebuildSiteMap_Click"
                OnClientClick="return confirm('Régénérer le plan du site ?');" />
            </p>
            <h3>Traduction</h3>
            <ul>
                <li>Synchroniser toutes les traductions</li>
            </ul>
            <p>
                <span style="background-color:Green;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                <input type="button" id="LocalizationGoButton" onclick="ResetLocalizationUpdate();this.disabled=true" title="Go" value="Go" />
                <div id="LocalizationUpdate">Date de la dernière traduction: <strong><span id="LastUpdateText"><asp:Literal ID="ltlLocalizationUpdate" runat="server" /></span></strong></div>
            </p>
        </fieldset> 
</asp:Content>

<asp:Content ID="ExternalContent" ContentPlaceHolderID="ExternalContentHolder" runat="server">
    <telerik:RadScriptBlock runat="server" ID="scriptBlock">
        <script type="text/javascript">
            //<![CDATA[
            var allTypes = <%= "['" + string.Join("','", NodeTypeManager.GetAllTypes(true).Where(t => t.IsGenerated).OrderByDescending(t => t.Depth).Select(t => t.Name).ToArray()) + "']" %>;
            var i = 0;
            var cancelled = false;
            
            function runMagicScripts() {
                if (i === 0)
                {
                    Medianamik.UI.Services.MaintenanceService.RegenerateUserProfileView(allTypes[i]);
                }
                if (!cancelled && (i > 0 || confirm('Rouler les scripts magiques ?'))) {
                    if(i < allTypes.length) {
                        Medianamik.UI.Services.MaintenanceService.RunMagicScriptsFor(allTypes[i], runMagicScripts, onFailed);
                        setMagicScriptMessage(String.format("Régénération des tables en cours... {0} ({1}/{2})", allTypes[i], i+1, allTypes.length));
                        i++;
                    }
                    else {
                        setMagicScriptMessage("Tables régénérées avec succès.");
                        i=0;
                        cancelled = false;
                        $('#cancelBtn').attr('disabled', 'disabled');
                    }
                }
            }

            function setMagicScriptMessage(text) {
                var magicScriptMessage = document.getElementById("MagicScriptMessage");
                magicScriptMessage.innerHTML = text;
            }

            function onFailed() {
                setMagicScriptMessage("Erreur lors de la régénération des tables.");
            }
            
            
            var lastUpdate = document.getElementById("LastUpdateText").innerHTML;
            
            function ResetLocalizationUpdate(){
                Medianamik.UI.Services.MaintenanceService.ResetLocalizationUpdate(updateLocalization);
            }
            
            function updateLocalization(args){
                Medianamik.UI.Services.MaintenanceService.UpdateLocalizationAndGetVersion(setLocalizationText);
            }
            
            function setLocalizationText(value){
                
                document.getElementById("LastUpdateText").innerHTML = value + ' (MISE À JOUR EN COURS...)';
                
                if (lastUpdate != value){
                    setTimeout('updateLocalization(null);',100);
                }
                else {
                    document.getElementById("LocalizationGoButton").disabled=false;
                    document.getElementById("LastUpdateText").innerHTML = value
                }
                
                lastUpdate = value;
            }
            
            //]]>
        </script>
    </telerik:RadScriptBlock>
</asp:Content>